/**
    算法描述：
    核心问题：
    解决所需数据结构+算法：
**/
#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;

int n, a[11];
bool v[11];

void dfs(int x) {
    if(x > n) {
        for(int i=1; i<=n; i++) {
            cout << setw(5) << a[i];
        }
        cout << endl;
        return;
    }
    for(int i=1; i<=n; i++) {
        if(!v[i]) {
            v[i] = true;
            a[x] = i;
            dfs(x + 1);
            a[x] = 0;
            v[i] = false;
        }
    }
}

int main() {
    memset(a, 0, sizeof(a));
    memset(v, false, sizeof(v));
    cin >> n;
    dfs(1);
    return 0;
}